/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Rango;
import co.com.sed.model.beans.TipoEvaluacion;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class TipoEvaluacionPeer {

	private static final String BUSCAR_TIPOEVALUACIONES =
		"SELECT id_t_evaluacion, descripcion, rango FROM t_evaluacion ";

	private static final String BUSCAR_TIPOEVALUACION  =	
		"SELECT id_t_evaluacion, descripcion, rango FROM t_evaluacion "+
		"WHERE id_t_evaluacion = &id_t_evaluacion";
	
	private static final String BUSCAR_TIPOEVALUACION_POR_RANGO  =	
		"SELECT id_t_evaluacion, descripcion, rango FROM t_evaluacion "+
		"WHERE rango = &rango";

	private static final String INSERTAR_TIPOEVALUACION  =
		"INSERT INTO t_evaluacion( descripcion , rango ) VALUES "+
		"('&descripcion', &rango)";

	private static final String ACTUALIZAR_TIPOEVALUACION =
		"UPDATE t_evaluacion "+
		"SET descripcion = '&descripcion', rango = &rango "+
		"WHERE id_t_evaluacion = &id_t_evaluacion";

	private static final String ELIMINAR_TIPOEVALUACION =
		"DELETE FROM t_evaluacion "+
		"WHERE id_t_evaluacion = &id_t_evaluacion";

	
	
	
	/** busca en la base de datos todos los registros de la tabla "t_evaluacion"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de t_evaluacion
	* @see         				TipoEvaluacion, Statement
	*/
	public static ArrayList<TipoEvaluacion> buscarTipoEvaluaciones(Statement stmt) {
		ArrayList<TipoEvaluacion> t_evaluaciones = new ArrayList<TipoEvaluacion>();

		String sql = BUSCAR_TIPOEVALUACIONES; //"SELECT id_t_evaluacion, descripcion, rango FROM t_evaluacion ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					TipoEvaluacion tevalcion = new TipoEvaluacion();

					tevalcion.setIdTipoEvaluacion(rs.getInt("id_t_evaluacion"));
					tevalcion.setDescripcion(rs.getString("descripcion"));
					tevalcion.setRango(new Rango(rs.getInt("rango")));
					
					
					t_evaluaciones.add(tevalcion);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return t_evaluaciones;
	}
	
	/** busca en la base de datos un registro de la tabla "t_evaluacion"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idTipoEvaluacion		    id de la t_evaluacion que se desea cosultar
	* 
	* @return					t_evaluacion buscada
	* @see         				TipoEvaluacion, Statement
	*/
	public static TipoEvaluacion buscarTipoEvaluacion(Statement stmt, int idTipoEvaluacion) {
		TipoEvaluacion t_evaluacion = new TipoEvaluacion();

		String sql = BUSCAR_TIPOEVALUACION;
		//"SELECT id_t_evaluacion, descripcion, rango FROM t_evaluacion "+
		//"WHERE id_t_evaluacion = &id_t_evaluacion";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_t_evaluacion", String.valueOf(idTipoEvaluacion));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					t_evaluacion.setIdTipoEvaluacion(rs.getInt("id_t_evaluacion"));
					t_evaluacion.setDescripcion(rs.getString("descripcion"));
					t_evaluacion.setRango(new Rango (rs.getInt("rango")));				
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return t_evaluacion;
	}
	
	
	/** busca en la base de datos todos los registros de la tabla "TipoEvaluacion" que pertenescan a un rango
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de TipoEvaluacion
	* @see         				TipoEvaluacion, Statement
	*/
	public static ArrayList<TipoEvaluacion> buscarTipoEvaluacionPorRango(Statement stmt, int idRango) {
		ArrayList<TipoEvaluacion> tipoEvaluaciones = new ArrayList<TipoEvaluacion>();

		String sql = BUSCAR_TIPOEVALUACION_POR_RANGO;

		// se setean los "parametros"
		sql = sql.replaceAll("&rango", "" + idRango);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					TipoEvaluacion tevn = new TipoEvaluacion();
					
					tevn.setIdTipoEvaluacion(rs.getInt("id_t_evaluacion"));
					tevn.setDescripcion(rs.getString("descripcion"));
					tevn.setRango(new Rango(rs.getInt("rango")));
											
					tipoEvaluaciones.add(tevn);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return tipoEvaluaciones;
	}
	
	
	
	/** Inserta una TipoEvaluacion en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param t_evaluacion		t_evaluacion que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarTipoEvaluacion(Statement stmt, TipoEvaluacion t_evaluacion) throws SQLException {
		int idNuevaTipoEvaluacion = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_TIPOEVALUACION;
			 //se setean los "parametros": &descripcion, &rango
			sql = sql.replaceAll("&descripcion", t_evaluacion.getDescripcion())
					 .replaceAll("&rango", "" + t_evaluacion.getRango().getIdRango());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaTipoEvaluacion = rs.getInt("id_t_evaluacion");
				Util.print("nuevo registro: " + idNuevaTipoEvaluacion);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaTipoEvaluacion;
	}
	

	/** Actualiza una t_evaluacion en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param t_evaluacion			t_evaluacion que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarTipoEvaluacion(Statement stmt, TipoEvaluacion t_evaluacion) throws SQLException {
		String sql = ACTUALIZAR_TIPOEVALUACION;
		 //se setean los "parametros": &id_t_evaluacion, &descripcion
		sql = sql.replaceAll("&id_t_evaluacion", "" + t_evaluacion.getIdTipoEvaluacion())
				 .replaceAll("&descripcion", t_evaluacion.getDescripcion())
				 .replaceAll("&rango", "" + t_evaluacion.getRango().getIdRango());
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un t_evaluacion en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param t_evaluacion		t_evaluacion que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarTipoEvaluacion(Statement stmt, TipoEvaluacion t_evaluacion) throws SQLException {
		String sql = ELIMINAR_TIPOEVALUACION;
		// se setean los "id_t_evaluacion = &id_t_evaluacion";
		sql = sql.replaceAll("&id_t_evaluacion", "" + t_evaluacion.getIdTipoEvaluacion());

		stmt.executeUpdate(sql);
	}
	
}
